第30篇:swing组件添加javafx的webview浏览器组件方法
Part1 前言
Swing是一个用于开发java图形界面程序的工具包,一直用着挺顺手的,美中不足就是没有好用的浏览器组件,只能引用第三方jar包,比如说JxBrowser、DJ Native Swing等,但是都不能满足我的需要。javafx中的webview浏览器组件非常好用,又是jdk官方出品的,非常稳定。目前看来拖拽swing组件最好用的工具应该是netbeans,可惜netbeans不支持拖拽webview这个图形控件。后续经过一系列测试,找到了一个简单的在netbeans拖拽图形控件的同时,实现swing调用webview组件的简单方法,而且代码量很少。
Part2 技术研究过程
Swing浏览器组件踩过的坑
先讲一下用Swing引用第三方jar包开发浏览器踩过的坑,大家可以参考一下。
1 JEditorPane这个组件是swing工具包中自带的,但是它能解析的html及css非常有限,N年没更新了,很多现在的网页,加载会出问题。
2 DJ Native Swing这个效果也不错,我捣鼓了半天,就是使用起来很麻烦,它的很多功能不符合我的预期,没办法在netbeans中拖拽使用
3 JxBrowser这个浏览器组件非常好用,但它是商业版的,网上已有破解方法。缺点就是,这个组件长时间不操作,会莫名其妙地卡死,偶尔还会报各种channel异常错误,我始终没解决这个问题,而且所依赖的jar太大,大概100多M。
Swing与Javafx的对比
在Swing图形工具包中,JFrame是一个顶层容器,JPanel是一个中间容器,JPanel上面可以放置各种Button按钮、Label标签等图形控件。有一个很形象的比喻,JFrame是一张桌子,各个组件是一盘又一盘的菜,而JPanel就是一个托盘,装了选好的菜品(组件)后放到JFrame桌子上。一个JFrame界面上可以有多个JPanel用来划分不同的区域。
在Javafx中,顶级容器是舞台Stage,也就是软件的界面窗口;Scene场景为中间容器,各种组件Button、Label成为Node节点,Node节点必须放在Scene场景中。
Swing添加Javafx的webview组件
Netbeans没法拖拽JFXPanel,那么我们可以这样,在JFrame上先放一个JPanel,然后手动敲代码在JPanel上添加一个JFXPanel,JFXPanel上放一个scene场景,在其上面放一个Javafx的webview组件,具体看如下操作:
JFrame-->JPanel-->JFXPanel-->scene-->webview,需要手写的代码量很少。具体操作如下:
1. netbeans拖拽画出一个JFrame窗口。
2. 在JFrame图形界面上,想要实现浏览器组件的位置放一个JPanel。
3. 手动敲代码,在JPanel上面放置一个JFXpanel,然后载入一个场景。
4. 手动敲代码,在JFXPanel上放置一个webview控件。
如下图所示,浏览器稳定运行。
javafx组件是Jdk1.8中自带的,经过不断测试,发现还是jdk官方自带的组件好用,非常稳定,没有任何报错,编写起来还简单。至此一直困扰我的swing浏览器组件编写问题完美解决!
专注于网络安全技术分享,包括红队、蓝队溯源、渗透测试、代码审计等
每周一篇,99%原创,敬请关注